package com.mrx.java8.stream;

/**
 * Java8中有两大最为重要的改变。第一个是Lambda 表达式；
 * 另外一个则是Stream API(java.util.stream.*)。
 * Stream 是Java8 中处理集合的关键抽象概念，它可以指定你希望对集合进行的操作，
 * 可以执行非常复杂的查找、过滤和映射数据等操作。
 * 使用Stream API 对集合数据进行操作，就类似于使用SQL 执行的数据库查询。
 * 也可以使用Stream API 来并行执行操作。
 * 简而言之，Stream API 提供了一种高效且易于使用的处理数据的方式。
 */

import com.mrx.java8.lambda.Employee;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * “集合讲的是数据，流讲的是计算”
 * 一、Stream 的三个步骤
 * 1、创建Stream
 * 2、中间操作
 * 3、终止操作
 */
public class StreamApi1 {

    @Test
    public void test1(){
        // 1、可以通过Collection 系列集合提供的stream() 或者 parallelStream()
        List<String> list = new ArrayList<>();
        Stream<String> stream1 = list.stream();

        // 2、通过Arrays 中的静态方法stream()获取数组流
        Employee[] employees = new Employee[10];
        Stream<Employee> stream2 = Arrays.stream(employees);

        // 3、使用Stream类中的静态方法 of()
        Stream<String> stream3 = Stream.of("aa","bb","cc");

        // 4、创建无限流
        // 迭代
        Stream<Integer> stream4 =  Stream.iterate(0,x->x+2);
        stream4.limit(100)
                .forEach(System.out::println);

        // 生成
        Stream<Double> stream5 = Stream.generate(()->Math.random());
        stream5.limit(20)
                .forEach(System.out::println);


    }


}
